Export Agents in GUID order so that the result is amenable to version control tracking

eric 8 years ago
parent
commit
d233946feb
2 changed files with 11 additions and 7 deletions
  1. 1 1
      lib/agents_exporter.rb
  2. 10 6
      spec/lib/agents_exporter_spec.rb

+ 1 - 1
lib/agents_exporter.rb

@@ -27,7 +27,7 @@ class AgentsExporter
27 27
   end
28 28
 
29 29
   def agents
30
-    options[:agents].to_a
30
+    options[:agents].sort_by{|agent| agent.guid}.to_a
31 31
   end
32 32
 
33 33
   def links

+ 10 - 6
spec/lib/agents_exporter_spec.rb

@@ -23,27 +23,27 @@ describe AgentsExporter do
23 23
       expect(data[:tag_fg_color]).to eq(tag_fg_color)
24 24
       expect(data[:tag_bg_color]).to eq(tag_bg_color)
25 25
       expect(Time.parse(data[:exported_at])).to be_within(2).of(Time.now.utc)
26
-      expect(data[:links]).to eq([{ :source => 0, :receiver => 1 }])
26
+      expect(data[:links]).to eq([{ :source => guid_order(agent_list, :jane_weather_agent), :receiver => guid_order(agent_list, :jane_rain_notifier_agent)}])
27 27
       expect(data[:control_links]).to eq([])
28
-      expect(data[:agents]).to eq(agent_list.map { |agent| exporter.agent_as_json(agent) })
28
+      expect(data[:agents]).to eq(agent_list.sort_by{|a| a.guid}.map { |agent| exporter.agent_as_json(agent) })
29 29
       expect(data[:agents].all? { |agent_json| agent_json[:guid].present? && agent_json[:type].present? && agent_json[:name].present? }).to be_truthy
30 30
 
31
-      expect(data[:agents][0]).not_to have_key(:propagate_immediately) # can't receive events
32
-      expect(data[:agents][1]).not_to have_key(:schedule) # can't be scheduled
31
+      expect(data[:agents][guid_order(agent_list, :jane_weather_agent)]).not_to have_key(:propagate_immediately) # can't receive events
32
+      expect(data[:agents][guid_order(agent_list, :jane_rain_notifier_agent)]).not_to have_key(:schedule) # can't be scheduled
33 33
     end
34 34
 
35 35
     it "does not output links to other agents outside of the incoming set" do
36 36
       Link.create!(:source_id => agents(:jane_weather_agent).id, :receiver_id => agents(:jane_website_agent).id)
37 37
       Link.create!(:source_id => agents(:jane_website_agent).id, :receiver_id => agents(:jane_rain_notifier_agent).id)
38 38
 
39
-      expect(exporter.as_json[:links]).to eq([{ :source => 0, :receiver => 1 }])
39
+      expect(exporter.as_json[:links]).to eq([{ :source => guid_order(agent_list, :jane_weather_agent), :receiver => guid_order(agent_list, :jane_rain_notifier_agent) }])
40 40
     end
41 41
 
42 42
     it "outputs control links to agents within the incoming set, but not outside it" do
43 43
       agents(:jane_rain_notifier_agent).control_targets = [agents(:jane_weather_agent), agents(:jane_basecamp_agent)]
44 44
       agents(:jane_rain_notifier_agent).save!
45 45
 
46
-      expect(exporter.as_json[:control_links]).to eq([{ :controller => 1, :control_target => 0 }])
46
+      expect(exporter.as_json[:control_links]).to eq([{ :controller => guid_order(agent_list, :jane_rain_notifier_agent), :control_target => guid_order(agent_list, :jane_weather_agent) }])
47 47
     end
48 48
   end
49 49
 
@@ -71,4 +71,8 @@ describe AgentsExporter do
71 71
       expect(AgentsExporter.new(:name => ",,").filename).to eq("exported-agents.json")
72 72
     end
73 73
   end
74
+
75
+  def guid_order(agent_list, agent_name)
76
+    agent_list.map{|a|a.guid}.sort.find_index(agents(agent_name).guid)
77
+  end
74 78
 end